package com.sky.poi;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;

/**
 * ClassName: POITest
 * Description:
 * 使用POI操作Excel文件
 * @Author HL
 * @Create 2024/6/1 15:16
 * @Version 1.0
 */
public class POITest {
    /**
     * 通过POI创建Excel文件并写入文件内容
     */
    public static void write() throws Exception {
        //在内存中创建一个Excel文件
        XSSFWorkbook excel = new XSSFWorkbook();
        //在Excel文件中创建一个sheet页
        XSSFSheet sheet = excel.createSheet("info");
        //在sheet页中创建行对象，rownum编号从0开始
        XSSFRow row = sheet.createRow(0);
        //在行中创建一个单元格，编号从0开始，并写入文件内容
        row.createCell(0).setCellValue("姓名");
        row.createCell(1).setCellValue("城市");
        row.createCell(2).setCellValue("备注");
        
        //创建一个新行
        XSSFRow row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("张三");
        row1.createCell(1).setCellValue("北京");
        row1.createCell(2).setCellValue("");
        
        XSSFRow row2 = sheet.createRow(2);
        row2.createCell(0).setCellValue("李四");
        row2.createCell(1).setCellValue("上海");
        row2.createCell(2).setCellValue("无");

        //通过输出流将内存中的Excel文件写入到磁盘
        FileOutputStream out = new FileOutputStream("info.xlsx");
        excel.write(out);

        //关闭资源
        excel.close();
        out.close();
    }

    /**
     * 通过POI读取Excel文件中的内容
     * @throws Exception
     */
    public static void read() throws Exception {
        //读取磁盘上已经存在的Excel文件
        XSSFWorkbook excel = new XSSFWorkbook("info.xlsx");
        //读取Excel文件中的第一个sheet页
        XSSFSheet sheet = excel.getSheetAt(0);
        //获取Sheet中最后一行的行号
        int lastRowNum = sheet.getLastRowNum();

        for(int i = 0; i <= lastRowNum; ++i){
            //获得某一行
            XSSFRow row = sheet.getRow(i);
            //获得单元格对象
            String cellValue0 = row.getCell(0).getStringCellValue();
            String cellValue1 = row.getCell(1).getStringCellValue();
            String cellValue2 = row.getCell(2).getStringCellValue();
            System.out.println(cellValue0 + " " + cellValue1 + " " + cellValue2);
        }

        excel.close();
    }

    public static void main(String[] args) throws Exception {
        write();
        read();
    }
}
